home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
tex
/
td187src.lzh
/
MTGRAPHI.I
< prev
next >
Wrap
Text File
|
1991-06-08
|
31KB
|
1,068 lines
(*##########################################################################
M A G I C T E R M I N A L
##########################################################################
Emuliert ein VT52-Terminal in einem wählbaren Bildschirmbereich.
##########################################################################
V2.0 19.10.90 Peter Hellinger Anpassung an neues MagicSys
V1.3 11.05.90 Peter Hellinger GEM-Fonthandling eingebaut
V1.2 06.05.90 Peter Hellinger Es werden jetzt alle Escapes unter-
stützt, auch die, die mehrere Para-
meter benötigen.
V1.1 04.05.90 Peter Hellinger Wordwrapping wird jetzt unterstützt
Default ist jedoch immer WrapOff!
V1.0 29.04.90 Peter Hellinger Implementation für TDI-Modula-2
##########################################################################*)
IMPLEMENTATION MODULE mtTerminal;
(*------------------------------*)
(* COMPILERSWITCHES *)
(*------------------------------*)
(* TDI-Version: DEAKTIVIERT *)
(*------------------------------*)
(* V- Overflow-Checks *)
(* R- Range-Checks *)
(* S- Stack-Check *)
(* N- NIL-Checks *)
(* T- TDI-Compiler vor 3.01 *)
(* Q+ Branch statt Jumps *)
(* *)
(*------------------------------*)
(* MM2-Version: AKTIVIERT *)
(*------------------------------*)
(*$R- Range-Checks *)
(*$S- Stack-Check *)
(* *)
(*------------------------------*)
FROM SYSTEM IMPORT ADDRESS, ADR;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
FROM MagicStrings IMPORT Assign, Append, Length;
FROM mtConvert IMPORT CardToStr, IntToStr, LCardToStr,
LIntToStr, LRealToStr, RealToStr;
FROM MagicVDI IMPORT VDIIntIn, VDIPtsIn, VDICall;
FROM mtAppl IMPORT VDIHandle, MaxWidth, MaxHeight, Bitplanes,
OpenWorkstation, CloseWorkstation,
FontCode, SelectFont, ScaleFont,
Monospaced, FontInfo, LoadFonts,
MouseOn, MouseOff;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5,
Bit6, Bit7, Bit8, Bit9, Bit10, Bit11, Bit12,
Bit13, Bit14, Bit15, LOC, Byte, ByteSet, sWORD,
sINTEGER, sCARDINAL, sBITSET, lWORD, lINTEGER,
lCARDINAL, lBITSET, CastToChar, CastToByte,
CastToByteset, CastToInt, CastToCard, CastToBitset,
CastToWord, CastToLInt, CastToLCard, CastToLBitset,
CastToLWord, CastToAddr;
IMPORT MagicBIOS, MagicDOS, MagicAES, MagicVDI;
(*--------------------------------------------------------------------------*
* Zustandsflags des Terminals *
*--------------------------------------------------------------------------*)
CONST cActive = 0; (* Terminal aktiv (Vordergrund) *)
cErase = 1; (* Zeichen vorlöschen? *)
cCursor = 2; (* Cursor ein? *)
cBlink = 3; (* Cursor blinkend? *)
cWrap = 4; (* Word-Wrapping *)
cEscape = 5; (* Escape wurde ausgegeben *)
cEscYs = 6; (* Escape Y: Spaltenwert wird erwartet *)
cEscYz = 7; (* Escape Y: Zeilenwert wird erwartet *)
cEscb = 8; (* Escape b: Vordergrundfarbe wird erwartet *)
cEscc = 9; (* Escape c: Hintergrundfarbe wird erwartet *)
cBColor = 10; (* Hintergrundfarbe beim Schreiben *)
cRedraw = 11; (* Redrawfeature eingeschaltet *)
cFlag12 = 12;
cFlag13 = 13;
cFlag14 = 14;
cFlag15 = 15;
(*--------------------------------------------------------------------------*)
TYPE TERMINAL = POINTER TO TerminalTyp;
TerminalTyp = RECORD
x: sINTEGER; (* X-Koordinate *)
y: sINTEGER; (* Y-Koordinate *)
px: sINTEGER; (* X-Pixelpos des Cursor *)
py: sINTEGER; (* Y-Pixelpos des Cursors *)
mx: sINTEGER; (* Position rechter Rand *)
my: sINTEGER; (* Position linker Rand *)
lastCol: sINTEGER; (* Pixelpos der letzten Spalte *)
lastLn: sINTEGER; (* Pixelpos der letzten Zeile *)
zBreite: sINTEGER; (* Zeichenbreite *)
zHoehe: sINTEGER; (* Zeichenhöhe *)
chwidth: sINTEGER; (* Breite des Zeichens - 1 *)
linehi: sINTEGER; (* Höhe der Bildschirmzeile - 1 *)
pmx: sINTEGER; (* Cursor-Breite *)
pmy: sINTEGER; (* Cursor-Höhe *)
sx: sINTEGER; (* *)
sy: sINTEGER; (* *)
xoff: sINTEGER; (* Offset für kursive Schrift *)
yoff: sINTEGER; (* für tiefgestellte Schrift *)
w: sINTEGER; (* Breite in Pixel *)
h: sINTEGER; (* Höhe in Pixel *)
sp: sINTEGER; (* Anzahl der Spalten *)
zl: sINTEGER; (* Anzahl der Zeilen *)
font: sINTEGER; (* Fontnummer *)
size: sINTEGER; (* Fontgröße *)
vColor: sINTEGER; (* Vordergrundfarbe (Text) *)
hColor: sINTEGER; (* Hintergrundfarbe *)
tab: sINTEGER; (* Tabweite *)
effect: Attribut; (* Texteffekte *)
zustand: sBITSET; (* Zustand des Terminals *)
END; (* TerminalTyp *)
(*--------------------------------------------------------------------------*)
TYPE tRect = RECORD
x, y, w, h: sINTEGER;
END;
VAR d, q: MagicVDI.MFDB;
dPtr: ADDRESS;
qPtr: ADDRESS;
VAR control7: POINTER TO ADDRESS;
control9: POINTER TO ADDRESS;
VAR InversHandle: sINTEGER;
NormalHandle: sINTEGER;
TextHandle: sINTEGER;
VAR rect: tRect;
rect2: tRect;
VAR Half: sINTEGER; (* Höhe für Hoch/Tiefgestellt *)
Full: sINTEGER; (* Höhe für Normale Schrift *)
Status: sINTEGER;
VAR MaxLines: sINTEGER; (* max. Anzahl Zeilen des Bildschirms *)
MaxColumns: sINTEGER; (* max. Anzahl Spalten des Bildschirms *)
MinX: sINTEGER; (* Ursprung des Bildschirms *)
MinY: sINTEGER;
VAR GEMFonts: BOOLEAN; (* GEMFonts benutzen, default off *)
(*--------------------------------------------------------------------------*)
VAR conterm[0484H]: ByteSet;
PROCEDURE Glocke;
CONST glocke = 2;
VAR